import { IPSDataEntity } from '../ipsdata-entity';
import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDEServiceAPIField } from './ipsdeservice-apifield';
import { IPSDEServiceAPIMethod } from './ipsdeservice-apimethod';
import { IPSDEServiceAPIRS } from './ipsdeservice-apirs';
import { IPSLanguageRes } from '../../res/ipslanguage-res';
import { IPSSysSFPlugin } from '../../res/ipssys-sfplugin';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEServiceAPI
 */
export interface IPSDEServiceAPI extends IPSDataEntityObject {
  /**
   * 接口模式
   * @description 值模式 [实体接口模式] {1：主接口、 0：从接口、 9：数据传输对象（DTO）嵌套成员 }
   * @type {( number | 1 | 0 | 9)}
   */
  aPIMode: number | 1 | 0 | 9;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 代码标识2（复数）
   * @type {string}
   */
  codeName2: string;

  /**
   * 逻辑名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  getLNPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 逻辑名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  get lNPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 逻辑名称语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getLNPSLanguageResMust(): IPSLanguageRes;

  /**
   * 逻辑名称
   * @type {string}
   */
  logicName: string;

  /**
   * 接口主关系集合
   *
   * @type {IPSDEServiceAPIRS[]}
   */
  getMajorPSDEServiceAPIRSs(): IPSDEServiceAPIRS[] | null;

  /**
   * 接口主关系集合
   *
   * @type {IPSDEServiceAPIRS[]}
   */
  get majorPSDEServiceAPIRSs(): IPSDEServiceAPIRS[] | null;

  findMajorPSDEServiceAPIRS(objKey: any): IPSDEServiceAPIRS | null;

  /**
   * 接口从关系集合
   *
   * @type {IPSDEServiceAPIRS[]}
   */
  getMinorPSDEServiceAPIRSs(): IPSDEServiceAPIRS[] | null;

  /**
   * 接口从关系集合
   *
   * @type {IPSDEServiceAPIRS[]}
   */
  get minorPSDEServiceAPIRSs(): IPSDEServiceAPIRS[] | null;

  findMinorPSDEServiceAPIRS(objKey: any): IPSDEServiceAPIRS | null;

  /**
   * 服务接口属性集合
   *
   * @type {IPSDEServiceAPIField[]}
   */
  getPSDEServiceAPIFields(): IPSDEServiceAPIField[] | null;

  /**
   * 服务接口属性集合
   *
   * @type {IPSDEServiceAPIField[]}
   */
  get psDEServiceAPIFields(): IPSDEServiceAPIField[] | null;

  findPSDEServiceAPIField(objKey: any): IPSDEServiceAPIField | null;

  /**
   * 接口方法集合
   *
   * @type {IPSDEServiceAPIMethod[]}
   */
  getPSDEServiceAPIMethods(): IPSDEServiceAPIMethod[] | null;

  /**
   * 接口方法集合
   *
   * @type {IPSDEServiceAPIMethod[]}
   */
  get psDEServiceAPIMethods(): IPSDEServiceAPIMethod[] | null;

  findPSDEServiceAPIMethod(objKey: any): IPSDEServiceAPIMethod | null;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  get psDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntityMust(): IPSDataEntity;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 支持数据导出
   * @type {boolean}
   * @default false
   */
  enableDataExport: boolean;

  /**
   * 支持数据导入
   * @type {boolean}
   * @default false
   */
  enableDataImport: boolean;

  /**
   * 主接口
   * @type {boolean}
   */
  major: boolean;

  /**
   * 嵌套成员
   * @type {boolean}
   * @default false
   */
  nested: boolean;
}
